# -*- coding: utf-8 -*-
"""
-----------------------------------------------------------------
    File Name   : common.py
    Description : 通用方法
    Author      : DuanGe
    Created On  : 2024/11/23
    Email       : duangeali@aliyun.com
    Version     : 1.0.0
    Copyright   : Copyright (c) 2024 DuanGe
    License     : Apache License 2.0
-----------------------------------------------------------------
"""
import datetime
import inspect


def info_tip(info: str):
    print(f"[提示信息: {info}!]")


def error_tip(info: str):
    print(f"[错误信息: {info}!]")


def input_loop(prompt: str, callback, before=None, repeat: bool = True, **kwargs: any):
    """
    循环输入函数, 直到回调函数返回True为止

    :param prompt: 输入时的提示信息 (str)
    :param callback: 回调函数; 必须包含val参数,用于接收输入的值; 必须返回布尔,用来判断是否结束输入函数input_loop; (callback)
    :param before: 前置操作函数 (callback, 可选)
    :param repeat: before函数是否每次循环都执行
    :param kwargs: 传递给回调函数的额外关键字参数
    """
    # 初始化标志
    before_flag = True
    while True:
        # 执行前置函数
        if before and before_flag:
            # 获取前置函数所需的参数
            before_kwargs = {k: v for k, v in kwargs.items() if k in inspect.signature(before).parameters}
            before(**before_kwargs)
            if not repeat:
                # 修改标志
                before_flag = False
        # 提示输入
        val = input(prompt)
        # 获取回调函数所需的参数
        callback_kwargs = {k: v for k, v in kwargs.items() if k in inspect.signature(callback).parameters}
        # 执行回调函数
        if callback(val=val, **callback_kwargs):
            break


def is_morning():
    """
    获取当前时间，判断是否为上午
    """
    # 获取当前时间
    now = datetime.datetime.now()
    # 获取当前小时数
    current_hour = now.hour
    # 判断是否为上午
    if current_hour < 12:
        return True
    else:
        return False
